package aOrganizar;

import java.util.Collection;
import java.util.Date;

import excepciones.ComprarException;
import excepciones.ReservarException;

/**
 * 
 * @author Braghini Marcos
 * 
 */
public interface Aerolinea {
	
	/**
	 * 
	 * @return Devuelve el nombre de la aerolinea
	 */
	
	public String getNombre();
	
	/**
	 * @return Devuelve el recargo de cada aerolinea
	 */
	public Double getRecargo();
	
	/**
	 * 
	 * Compra un asiento
	 * 
	 * @param asiento
	 *            Asiento que se quiere comprar
	 * @param usuario
	 *            Asiento que se quiere reservar
	 * @throws ComprarException
	 *             Lanza una excepcion sino puede comprar el asiento
	 */

	public void comprar(Asiento asiento, Usuario user) throws ComprarException;
	
	
	/**
	 * Reserva un asiento
	 * 
	 * @param asiento
	 *            Asiento que se quiere reservar
	 * @param user
	 *            Usuario que quiere reservar el asiento
	 * @throws ReservarException
	 *             Lanza una excepcion sino puede reservar el asiento
	 */
	public void reservar(Asiento asiento, Usuario user) throws ReservarException;
	
	
	/**
	 * Busca asientos con origen y destino
	 * 
	 * @param origen
	 *            Lugar desde donde viaja
	 * @param destino
	 *            Lugar a donde quiere viajar
	 * @param fecha
	 *            Fecha en la que quiere viajar
	 */


	public Collection<Asiento> findAsientosByOrigenYDestino(String origen, String destino,
			Date fecha, Usuario user);

	/**
	 * Busca todos los asientos disponibles que salen en la fecha indicada y
	 * desde origen indicado.
	 * 
	 * @param origen
	 * @param fecha
	 * @return
	 */
	public Collection<Asiento> findAsientosByOrigen(String origen, Date fecha, Usuario user);
	

}